/**
@file     	Keyboard.h
@brief    	all kinds of Keyboard
@author  	arvin
@version 	1.0   2012/12/14
*/

#ifndef CXX_KEYBOARD_H
#define CXX_KEYBOARD_H
#include "ProductDef.h"

class Keyboard
{
public:

	/**
	* Destruction
	*
	* @param VOID
	* @return
	*/
	virtual ~Keyboard() = 0;

	/**
	* Operation
	*
	* @param VOID
	* @return
	*/
	virtual VOID Operation() = 0;

	/**
	* GetManufacturer
	*
	* @param VOID
	* @return MANUFACTURER_TYPE
	*/
	MANUFACTURER_TYPE GetManufacturer();

protected:
	/**
	* Construction
	*
	* @param MANUFACTURER_TYPE eManufacturer
	* @return
	*/
	Keyboard(MANUFACTURER_TYPE eManufacturer);


	/**
	* SetManufacturer
	*
	* @param MANUFACTURER_TYPE eManufacturer
	* @return
	*/
	VOID SetManufacturer(MANUFACTURER_TYPE eManufacturer);
private:

	/**
	* Construction
	*
	* @param VOID
	* @return
	*/
	Keyboard();

	/**
	* Copy Construction
	*
	* @param const Keyboard& cKeyboard
	* @return
	*/
	Keyboard(const Keyboard& cKeyboard);

	/**
	* Assignment
	*
	* @param const Keyboard& cKeyboard
	* @return Keyboard&
	*/
	Keyboard& operator=(const Keyboard& cKeyboard);

public:
protected:
private:
	MANUFACTURER_TYPE m_eManufacturer;
};

class DELLKeyboard : public Keyboard
{
public:
	/**
	* Construction
	*
	* @param VOID
	* @return
	*/
	DELLKeyboard();

	/**
	* Destruction
	*
	* @param VOID
	* @return
	*/
	virtual ~DELLKeyboard();

	/**
	* Operation
	*
	* @param VOID
	* @return
	*/
	virtual VOID Operation();

protected:
private:

	/**
	* Copy Construction
	*
	* @param const DELLKeyboard& cASUSKeyboard
	* @return
	*/
	DELLKeyboard(const DELLKeyboard& cDELLKeyboard);

	/**
	* Assignment
	*
	* @param const DELLKeyboard& cASUSKeyboard
	* @return DELLKeyboard&
	*/
	DELLKeyboard& operator=(const DELLKeyboard& cDELLKeyboard);

public:
protected:
private:
};

class ASUSKeyboard : public Keyboard
{
public:
	/**
	* Construction
	*
	* @param VOID
	* @return
	*/
	ASUSKeyboard();

	/**
	* Destruction
	*
	* @param VOID
	* @return
	*/
	virtual ~ASUSKeyboard();

	/**
	* Operation
	*
	* @param VOID
	* @return
	*/
	virtual VOID Operation();

protected:
private:

	/**
	* Copy Construction
	*
	* @param const ASUSKeyboard& cASUSKeyboard
	* @return
	*/
	ASUSKeyboard(const ASUSKeyboard& cASUSKeyboard);

	/**
	* Assignment
	*
	* @param const ASUSKeyboard& cASUSKeyboard
	* @return ASUSKeyboard&
	*/
	ASUSKeyboard& operator=(const ASUSKeyboard& cASUSKeyboard);

public:
protected:
private:
};

class HPKeyboard : public Keyboard
{
public:
	/**
	* Construction
	*
	* @param VOID
	* @return
	*/
	HPKeyboard();

	/**
	* Destruction
	*
	* @param VOID
	* @return
	*/
	virtual ~HPKeyboard();

	/**
	* Operation
	*
	* @param VOID
	* @return
	*/
	virtual VOID Operation();

protected:
private:

	/**
	* Copy Construction
	*
	* @param const HPKeyboard& cHPKeyboard
	* @return
	*/
	HPKeyboard(const HPKeyboard& cHPKeyboard);

	/**
	* Assignment
	*
	* @param const HPKeyboard& cHPKeyboard
	* @return HPKeyboard&
	*/
	HPKeyboard& operator=(const HPKeyboard& cHPKeyboard);

public:
protected:
private:
};


#endif	/* >>CXX_KEYBOARD_H<< */
/* EOF */